/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames.internos.relatorios;

import controle.gui.frames.internos.superclasses.Controle;
import controle.gui.utils.ApagaElementosDaInterface;
import controle.gui.utils.EnabledGUIElements;
import controle.utils.Datas;
import controle.utils.ReportUtils;
import gui.frames.internos.relatorios.IFResumoSemanal;
import java.io.InputStream;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
import modelo.Localidade;
import modelo.Municipio;
import persistencia.session.ConnectionFactory;

/**
 *
 * @author maycon
 */
public class ControleResumoSemanal extends Controle {

    private IFResumoSemanal frame = null;
    private ApagaElementosDaInterface apaga = new ApagaElementosDaInterface();

    public ControleResumoSemanal(IFResumoSemanal frame) {
        super(frame);
        this.frame = frame;
    }

    public void inicializa() {
        this.eventoTipoBoletim();
    }

    public void limparGUI() {

        frame.getRadioBoletimPesquisa().setSelected(true);
        frame.getRadioConcluidaNao().setSelected(true);
        apaga.apagaJComboBox(frame.getComboLiAmostra(), frame.getComboTipoAtividade());
        apaga.apagaJTextField(frame.getTextCodigoMunicipio(), frame.getTextNomeMunicipio(), frame.getTextCodigoLocalidade(),
                frame.getTextNumeroAtividade(), frame.getTextAtividadeAno(), frame.getTextNumeroSemana(), frame.getTextSemanaAno(),
                frame.getTextInicioAtividade(), frame.getTextFimAtividade());

        EnabledGUIElements.disabledJComponent(frame.getTextCodigoLocalidade(), frame.getComboLocalidade(), frame.getComboLiAmostra());

    }

    /**
     * Imprime o relatório
     */
    public boolean imprimir() {

        try {

            InputStream inputStream = getClass().getResourceAsStream("/Resumo_Semanal.jasper");
            Municipio municipio = null;
            Localidade localidade = null;

            Map parametros = new HashMap();

            //Define o tipo do boletim
            if (frame.getRadioBoletimPesquisa().isSelected()) {
                parametros.put("tipoBoletim", 0);
            } else {
                parametros.put("tipoBoletim", 1);
            }

            //Parâmetro de Município
            if (frame.getTextCodigoMunicipio().getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Defina o município.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                List<Municipio> list = getListMunicipio(frame.getTextCodigoMunicipio().getText());

                if (list == null) {
                    return false;

                } else {
                    municipio = list.get(0);
                    parametros.put("idMunicipio", municipio.getIdMunicipio());

                    //Parâmetro de Localidade
                    if (!frame.getTextCodigoLocalidade().getText().isEmpty()) {
                        List<Localidade> listLoc = getListLocalidade(frame.getTextCodigoLocalidade().getText(), municipio);

                        if (listLoc != null) {
                            localidade = listLoc.get(0);
                            parametros.put("idLocalidade", localidade.getIdLocalidade());

                        } else {
                            return false;
                        }
                    }
                }
            }

            //numeroAtividade
            if (frame.getTextNumeroAtividade().getText().isEmpty()
                    || frame.getTextAtividadeAno().getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Defina o número da atividade.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                String numeroAtividade = frame.getTextNumeroAtividade().getText() + "/" + frame.getTextAtividadeAno().getText();
                parametros.put("numeroAtividade", numeroAtividade);
            }

            //semEpid
            if (frame.getTextNumeroSemana().getText().isEmpty()
                    || frame.getTextSemanaAno().getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Defina o número da semana epidemiológica.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                String semanaEpid = frame.getTextNumeroSemana().getText() + "/" + frame.getTextSemanaAno().getText();
                parametros.put("semEpid", semanaEpid);
            }

            //tipoAtividade
            if (frame.getComboTipoAtividade().getSelectedIndex() == 0) {
                JOptionPane.showMessageDialog(null, "Defina o tipo da atividade do resumo.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                parametros.put("tipoAtividade", frame.getComboTipoAtividade().getSelectedItem().toString());
            }

            //liAmostra
            if (frame.getComboTipoAtividade().getSelectedItem().toString().equals("L.I.")
                    && frame.getComboLiAmostra().getSelectedIndex() == 0) {
                JOptionPane.showMessageDialog(null, "Defina o percentual de LI Amostra.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else if (frame.getComboLiAmostra().getSelectedIndex() != 0) {
                parametros.put("liAmostra", Integer.parseInt(frame.getComboLiAmostra().getSelectedItem().toString().replaceAll("%", "")));
            }

            //inicioAtividade
            if (frame.getTextInicioAtividade().getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Defina o início da Atividade.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                Date inicio = Datas.getDate(frame.getTextInicioAtividade().getText());
                if (inicio != null) {
                    parametros.put("inicioAtividade", inicio);
                } else {
                    return false;
                }
            }

            //fimAtividade
            if (frame.getTextFimAtividade().getText().isEmpty()) {
                JOptionPane.showMessageDialog(null, "Defina o fim da Atividade.\n", "Atenção!", JOptionPane.WARNING_MESSAGE);
                return false;

            } else {
                Date fim = Datas.getDate(frame.getTextFimAtividade().getText());
                if (fim != null) {
                    parametros.put("fimAtividade", fim);
                } else {
                    return false;
                }
            }

            //concluida
            parametros.put("concluida", frame.getRadioConcluidaSim().isSelected());
            System.out.println(parametros.get("numeroAtividade") + " " + parametros.get("semEpid") + " " + 
                    parametros.get("inicioAtividade") + " " + parametros.get("fimAtividade") + " " + 
                    parametros.get("liAmostra") + " " + parametros.get("tipoAtividade") );

            //Executa o relatório
            ReportUtils.openReport("Resumo Semanal", inputStream, parametros, ConnectionFactory.getConnection());

            return true;

        } catch (Exception er) {
            JOptionPane.showMessageDialog(null, "Erro ao criar o relatório do resumo semanal.\n" + er, "Erro", JOptionPane.ERROR_MESSAGE);
            er.printStackTrace();
        }

        return true;
    }

    /**
     * Evento dos radioButtons de Tipo de Boletim
     */
    public void eventoTipoBoletim() {

        if (frame.getRadioBoletimPesquisa().isSelected()) {
            frame.getComboTipoAtividade().setModel(new javax.swing.DefaultComboBoxModel(
                    new String[]{"Selecione...", "A.R.M.", "P.E.", "P.V.E.", "D.F.", "L.I."}));

        } else {
            frame.getComboTipoAtividade().setModel(new javax.swing.DefaultComboBoxModel(
                    new String[]{"Selecione...", "T.F.", "P.E.", "P.V.E.", "D.F."}));
        }

    }

    /**
     * Evento do ComboBox de Tipo de Atividade
     */
    public void eventoTipoAtividade() {

        if (frame.getComboTipoAtividade().getSelectedItem().toString().equals("L.I.")) {
            frame.getComboLiAmostra().setEnabled(true);
            frame.getComboLiAmostra().setSelectedIndex(0);

        } else {
            frame.getComboLiAmostra().setEnabled(false);
            frame.getComboLiAmostra().setSelectedIndex(0);
        }
    }


}